package almacenes.modelo.service.impl;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import almacenes.modelo.dao.InspeccionDao;
import almacenes.modelo.dao.impl.GeneralesDaoImpl;
import almacenes.modelo.dao.impl.InspeccionDaoImpl;
import almacenes.modelo.entidad.Agrupamiento;
import almacenes.modelo.entidad.Departamento;
import almacenes.modelo.entidad.Inspeccion;
import almacenes.modelo.entidad.InspeccionDetalle;
import almacenes.modelo.entidad.UsuarioMae;
import almacenes.modelo.excepcion.ExcepcionGeneral;
import almacenes.modelo.service.InspeccionService;

public class InspeccionServiceImpl extends GeneralesDaoImpl implements InspeccionService {
	private Log logger = LogFactory.getLog(this.getClass());
	private InspeccionDao inspeccionDao = new InspeccionDaoImpl();
	


	@Override
	public List<Inspeccion> obtenerInspecciones() throws ExcepcionGeneral {
		try {
			iniciaOperacion();
			return this.inspeccionDao.obtenerInspecciones(sesion);
		} catch (Exception ex) {
			String sMensaje = "No se puedo obtener las Inspecciones";
			this.logger.error(sMensaje, ex);
			throw new ExcepcionGeneral(sMensaje, ex);
		}finally{
			sesion.close();
		}
	}

	@Override
	public List<Inspeccion> obtenerInspeccionesFiltro(Inspeccion objInspeccion)throws ExcepcionGeneral {
		try {
			iniciaOperacion();
			return this.inspeccionDao.obtenerInspeccionesFiltro(sesion, objInspeccion);
		} catch (Exception ex) {
			String sMensaje = "No se puedo obtener las Inspecciones";
			this.logger.error(sMensaje, ex);
			throw new ExcepcionGeneral(sMensaje, ex);
		}finally{
			sesion.close();
		}
	}

	@Override
	public List<Departamento> obtenerDepartamentos(int iParametro)throws ExcepcionGeneral {
		try {
			iniciaOperacion();
		return this.inspeccionDao.obtenerDepartamentos(iParametro,sesion);
	} catch (Exception ex) {
		String sMensaje = "No se puedo obtener los Departamentos";
		this.logger.error(sMensaje, ex);
		throw new ExcepcionGeneral(sMensaje, ex);
	}finally{
		sesion.close();
	}
	}


	@Override
	public List<Agrupamiento> obtenerCampania(int iProveedor, int iParametro)
			throws ExcepcionGeneral {
		try {
			iniciaOperacion();
			return this.inspeccionDao.obtenerCampania(iProveedor, iParametro,sesion);
		} catch (Exception ex) {
			String sMensaje = "No se puedo obtener los Departamentos";
			this.logger.error(sMensaje, ex);
			throw new ExcepcionGeneral(sMensaje, ex);
		}finally{
			sesion.close();
		}
	}


	@Override
	public List<Agrupamiento> obtenerPremio(int iProveedor, int iDepto,
		int iCampania) throws ExcepcionGeneral {
		try {
			iniciaOperacion();
			return this.inspeccionDao.obtenerPremio(iProveedor, iDepto, iCampania,sesion);
		} catch (Exception ex) {
			String sMensaje = "No se puedo obtener los Departamentos";
			this.logger.error(sMensaje, ex);
			throw new ExcepcionGeneral(sMensaje, ex);
		}finally{
			sesion.close();
		}
	}


	@Override
	public List<Agrupamiento> obtenerFeria(int iProveedor, int iParametro)
			throws ExcepcionGeneral {
		try {
			iniciaOperacion();
			return this.inspeccionDao.obtenerFeria(iProveedor, iParametro,sesion);
		} catch (Exception ex) {
			String sMensaje = "No se puedo obtener los Departamentos";
			this.logger.error(sMensaje, ex);
			throw new ExcepcionGeneral(sMensaje, ex);
		}finally{
			sesion.close();
		}
	}


	@Override
	public List<UsuarioMae> obtenerGestoresAlmacen(int iProveedor,
			UsuarioMae objUsuario, int iDepto) throws ExcepcionGeneral {
		try {
			iniciaOperacion();
			return this.inspeccionDao.obtenerGestoresAlmacen(iProveedor, objUsuario, iDepto,sesion);
		} catch (Exception ex) {
			String sMensaje = "No se puedo obtener los Gestores de Almacen";
			this.logger.error(sMensaje, ex);
			throw new ExcepcionGeneral(sMensaje, ex);
		}finally{
			sesion.close();
		}
	}


	@Override
	public String insertarInspeccion(Inspeccion objInspeccion)throws ExcepcionGeneral {
		String sms ="";
	   try {
		iniciaOperacion();
		sms = inspeccionDao.insertarInspeccion(sesion, objInspeccion);
	    sesion.beginTransaction().commit();
	   return sms;
	} catch (Exception ex) {
		String sMensaje = "No se puedo insertar la Inspeccion";
		this.logger.error(sMensaje, ex);
		throw new ExcepcionGeneral(sMensaje, ex);
	}finally{
		sesion.close();
	 }
	}

	@Override
	public List<InspeccionDetalle> obtenerDetalleInspeccion(int iInspeccion)
			throws ExcepcionGeneral {
		try {
			iniciaOperacion();
			return this.inspeccionDao.obtenerDetalleInspeccion(iInspeccion, sesion);
		} catch (Exception ex) {
			String sMensaje = "No se puedo obtener el detalle de la Inspeccion";
			this.logger.error(sMensaje, ex);
			throw new ExcepcionGeneral(sMensaje, ex);
		}finally{
			sesion.close();
		}
	}


	

}	